草庐IT

Android AsyncTask 内存泄漏

全部标签

通过构造函数为 vector 预分配 C++ 内存失败

我使用的是VS2013(Win764)。我发现了一些奇怪的行为。当我使用reserve方法保留内存时,代码有效,但是当我通过构造函数保留时,它会抛出bad_allocconstintelemNumber=100000000;try{//std::vector*intVector=newstd::vector(elemNumber);//throwsbad_allocstd::vector*intVector=newstd::vector();intVector->reserve(elemNumber);//OKstd::chrono::time_pointstart,end;start

C++ 动态分配的内存在崩溃或强制退出后返回?

我想知道程序崩溃或用户强制退出是否会将动态分配的内存返回给计算机。否则内存将泄漏,直到系统重新启动。 最佳答案 大多数现代操作系统会在进程终止后自动回收所有进程内存。通常,这是通过让操作系统从其页表中逐出与该进程关联的所有虚拟页面来实现的。因此,除非您使用旧操作系统或遇到奇怪的操作系统错误,否则应该回收内存。 关于C++动态分配的内存在崩溃或强制退出后返回?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.c

C++ 多线程 - 内存同步

我有两个由不同线程调用的函数:voidSetPtr(T*ptr_){ptr=ptr_;}voidProcess(){if(ptr!=nullptr){ptr->fun();//fun()cancallProcess()again}}我知道SetPtr在有人可以调用Process之前被调用,但是因为这些函数是由单独的线程调用的,所以内存可能不同步,即Process可能会看到一个初始的ptr值,或者可能会尝试读取一个未完全写入的ptr。我可以使用std::lock_quard来提供同步,但我想看看其他可能性。为这种情况提供内存同步的其他方法有哪些?编辑1如何在可以随时调用SetPtr的情况

c++ - 内存中的Opencv Mat表示

我知道在内存中opencv将Mat对象表示为一个大数组。因此,如果我有3个尺寸为200x200的channel垫,那么在内存中它将把这个垫存储在一个大小为3x200x200的数组中。或者更一般地,内存中的任何Mat都将存储为channels*rows*cols。我们可以得到这样的数组double*array=(double)mat.data;假设矩阵是double类型现在我的问题是索引这个数组的方法是什么,例如如果我想访问channelch中的元素,行r和列c是有效的索引array[ch*rows*cols+c*rows+r]或array[ch*rows*cols+r*cols+c]问

c++ - 标准 C++ 事务内存状态

C++17事务内存提议的当前状态是什么。它是否会包含在标准中,旨在包含在标准C++的某些future版本中,或者只是一个实验性的概念验证功能,其标准化状态仍未确定?我问是因为一些标准化委员会的文件似乎在这里给出了相互矛盾的信息。一方面我们有P0265R0(http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0265r0.pdf)说事务内存不会被标准化,另一方面-Stroustrup(http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/n4492.pdf)的N4492

在CUDA中测量特定指令或代码线的内存带宽的方法?

有没有办法测量CUDA中某个内存指令或代码行的内存带宽?(NVPROF可以输出整个内核的内存带宽。)如果Clock()函数是唯一的方法,那么计算带宽的方程式是什么?(汇总地址为每个{指令或代码行}除以()差异吗?)我想查看某个指令或限制内存带宽的代码线。(例如,MSHR..)我有两个设备GTX980(Maxwell,SM_52)和P100(Pascal,SM_60),上面是X86_64BITSLinux系统。看答案一种可以提供一些见识的工具是Nsight工具中的指令级分析。它可以使您了解当SM“失速”(未能发布任何指示)时应归咎于哪一行。由于LD/ST指令没有阻止执行,因此您经常立即看到摊位下

c++ - 删除元素后 std::string 容量保持不变,那么它是否占用了一些内存?

下面这段代码:stringa="abc";cout...输出:33即使我从字符串中删除一些元素,容量也保持不变。所以我的问题是:是否有一些内存因为容量问题而被占用?如果我没有明确地reserve()怎么办?如果我使用reserve()并且没有用完整个容量,我是不是在浪费内存?如果需要,这些额外的内存(我没有使用)是否会分配给其他东西?编辑:假设我有stringa="something";a="ab";现在我知道a永远不会超过两个字符。那么调用reserve(2)这样内存就不会被浪费是明智的吗? 最佳答案 我先回答你的问题:内存属于字

c++ - 减少 gcc 内存使用

目前我必须在非常有限的硬件(只有2GBRAM的核心i5)上构建一个相当大的项目。当使用4线程运行make时,由于每个线程占用高达40%的RAM,gcc崩溃了。我用谷歌搜索了一下,发现了这个link.一些人反馈它有效。但是,不是我。这是我的做法。/usr/bin/qmake-qt4-r-speclinux-g++$DEBUG_FLAGS-oMakefile"QMAKE_CXXFLAGS+=--paramggc-min-expand=10--paramggc-min-heapsize=8192"/home/build-srv/LargeProject/largeProject.promak

c++ - Valgrind 未检测到危险的释放内存

我正在学习valgrind框架,我决定在我自己的小测试用例上运行它。这是以下程序,它强制从堆中删除额外的对象(我在AMD64/LINUX上运行它):#includeusingnamespacestd;structFoo{Foo(){cout(ar)-2)=4;delete[]ar;return0;}但是valgrind的执行结果让我很困惑:$valgrind--leak-check=full./a.out-v==17649==Memcheck,amemoryerrordetector==17649==Copyright(C)2002-2017,andGNUGPL'd,byJulianS

c++ - 实际上,C++11 中 std::atomic 的内存占用是多少?

我正在编写的一个程序需要在ram中存储大量数据(几千兆字节)以供多个线程原子访问。std::atomic似乎是一种合理的方式来做到这一点,因为它的访问可能比将所有访问包装在一个或多个std::mutex中更有效。s,因为,最坏的情况下,它将在内部使用互斥量并且是等效的。我的数据组织为一组Chunk对象,除其他外,它们有一个包含大部分数据的数组成员。现在,我正在考虑将其定义为std::array,SOME_CONSTANT_HERE>,但这只有在内存占用为std::atomic时才会有效在内置类型上,例如unsignedint不比unsignedint差本身,因为根据我的计算,以我需要存